<?php
	####################################################
	# Validation 스페셜 타입 데이터 밸리데이션         #
	####################################################
	# 의존성 StrFormat

	class Validation {

		# 해당 키/값이 없을 경우 뒤로.
		# 리퀘스트 배열, 필수키-유니크키(문자열)
		public static function check_isnt_key_val($arr_request, $find_key) {
			foreach($arr_request as $key=>$val){
				if(!array_key_exists($find_key, $arr_request) || empty($val)){
					Mover::back("해당 값이 없거나, 값이 비워짐", TRUE);
					return;
				}
			}
		}

		# 리퀘스트 값 중 널이 있을 경우 뒤로.
		public static function check_is_emptys($arr_request) {
			if(!is_array($arr_request)){
				if(empty($arr_request)){
					Mover::back("값이 비워짐", TRUE);
					return;
				}
				return;
			}
			foreach($arr_request as $key=>$val){
				if($key != 'x' && $key != 'y') {
					if(empty($val)){
						Mover::back("값이 비워짐 ".$key.">>".$val, TRUE);
						return;
					}
				}
			}
		}

		# 리퀘스트 값 중 두 값이 일치 하지 않을 경우 뒤로.
		public static function check_is_equal($value1, $value2) {
			if(Validation::is_equal($value1, $value2) == TRUE){
				Mover::back("값 불일치", TRUE);
				return;
			}
		}


		# 리퀘스트 값 중 폰형식과 일치 하지 않을 경우 뒤로.
		public static function check_is_phone($get_or_post_variable_argument) {
			if(Validation::is_phone($get_or_post_variable_argument) == FALSE){
				Mover::back("값이 폰이 아님", TRUE);
				return;
			}
		}

		# 리퀘스트 값 중 이메일형식과 일치 하지 않을 경우 뒤로.
		public static function check_is_email($get_or_post_variable_argument) {
			if(Validation::is_email($get_or_post_variable_argument) == FALSE){
				Mover::back("값이 이메일이 아님", TRUE);
				return;
			}
		}

		# 리퀘스트 값 중 아이디 패스워드로 유용한 값이 아닌 경우 뒤로.
		public static function check_is_idpw($get_or_post_variable_argument) {
			if(Validation::is_idpw($get_or_post_variable_argument) == FALSE){
				Mover::back("값이 유효하지 않음".$get_or_post_variable_argument, TRUE);
				return;
			}
		}

		# 아이디 패스워드로 유용한 값인가.
		public static function is_idpw($get_or_post_variable_argument) {
			$pattern = "/^[a-z0-9_!#$%^&*()?+=\/]{5,24}$/";

			if(preg_match($pattern, $get_or_post_variable_argument)){
				//echo "match true";
				return TRUE;
			} else {
				//echo "match false";
				return FALSE;
			}
		}

		# 값이 일치하지 않을 경우.
		public static function is_equal($value1, $value2) {
			return strcmp($value1, $value2);
		}

		# validation special type string to phone
		public static function is_phone($get_or_post_variable_argument, $has_dash = FALSE) {
			$pattern = "/([0]{1}[1]{1}[016789]{1})+([0-9]{3,4})+([0-9]{4})/";
			if($has_dash == TRUE){
				$get_or_post_variable_argument = preg_replace("/-/i", "", $get_or_post_variable_argument);
				//echo "arg>>".$get_or_post_variable_argument;
			}
			if(strlen(StrFormat::convert_to_mobile_phone_number_remove_dash($get_or_post_variable_argument)) <= 11 && strlen(StrFormat::convert_to_mobile_phone_number_remove_dash($get_or_post_variable_argument)) >= 10){
				//echo "match count";
				if(preg_match($pattern, $get_or_post_variable_argument)){
					//echo "match true";
					return TRUE;
				} else {
					//echo "match false";
					return FALSE;
				}
			} else {
				//echo "unmatch count";
				return FALSE;
			}
		}

		# validation special type string to email
		public static function is_email($get_or_post_variable_argument) {
			$pattern = "/^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i";

			if(preg_match($pattern, $get_or_post_variable_argument)){
				//echo "match true";
				return TRUE;
			} else {
				//echo "match false";
				return FALSE;
			}
		}

		# 숫자, 영문자 검사
		public static function is_alphanumeric($str) {
			if(eregi("[^0-9a-zA-Z_]",$str)){
				return TRUE;
			} else {
				return FALSE;
			}
		}

		# validation special type string to email
		public static function is_mail( $str ) {
			if( eregi("([a-z0-9_-.]+)@([a-z0-9_-.]+)", $str) ) return $str;
			else return '';
		}

		# 빈문자열 검사
		public static function is_blank($str) {
			$temp=str_replace("　","",$str);
			$temp=str_replace("n","",$temp);
			$temp=strip_tags($temp);
			$temp=str_replace(" ","",$temp);
			$temp=str_replace(" ","",$temp);
			if(eregi("[^[:space:]]",$temp)) {
				return FALSE;
			} else {
				return TRUE;
			}
		}

		# 숫자 검사
		public static function is_num($str) {
			if(eregi("[^0-9]",$str)) {
				return TRUE;
			} else {
				return FALSE;
			}
		}

		# 주민번호 검사
		public static function is_resident_registration_number($reginum) {
			$weight = '234567892345'; # 자리수 weight 지정
			$len = strlen($reginum);
			$sum = 0;
			if ($len <> 13) {
				return false;
			}

			for ($i = 0; $i < 12; $i++) {
				$sum = $sum + (substr($reginum, $i, 1) * substr($weight, $i, 1));
			}

			$rst = $sum%11;
			$result = 11 - $rst;
			if ($result == 10) {
				$result = 0;
			} else if ($result == 11) {
				$result = 1;
			}

			$jumin = substr($reginum, 12, 1);
			if ($result <> $jumin) {
				return false;
			}
			return true;
		}

		# 주민등록번호 검사
		public static function is_rrn($jumin) {
			$weight = '234567892345'; // 자리수 weight 지정
			$len = strlen($jumin);
			$sum = 0;

			if ($len <> 13) return false;

			for ($i = 0; $i < 12; $i++) {
				$sum = $sum + (substr($jumin,$i,1)*substr($weight,$i,1));
			}

			$rst = $sum%11;
			$result = 11 - $rst;

			if ($result == 10) $result = 0;
			else if ($result == 11) $result = 1;

			$ju13 = substr($jumin,12,1);

			if ($result <> $ju13) return false;
			return true;
		}

		#사업자번호 검사
		public static function is_corp_resident_registration_number($reginum) {
			$weight = '137137135'; # 자리수 weight 지정
			$len = strlen($reginum);
			$sum = 0;
			if ($len <> 10) {
				return false;
			}

			for ($i = 0; $i < 9; $i++) {
				$sum = $sum + (substr($reginum, $i, 1) * substr($weight, $i, 1));
			}
			$sum = $sum + ((substr($reginum, 8, 1) * 5) / 10);
			$rst = $sum%10;
			if ($rst == 0) {
				$result = 0;
			} else {
				$result = 10 - $rst;
			}

			$saub = substr($reginum, 9, 1);
			if ($result <> $saub) {
				return false;
			}
			return true;
		}


		# 한글검사
		public static function is_kor($str) {
			if (strlen($str) != 2) return false;
			$i = ord ($str[0]);
			$j = ord ($str[1]);
			if ($i < 0x81 || $i > 0xC8 || $j > 0xFE || ($j >= 0x00 && $j <= 0x40) || ($j >= 0x5B && $j <= 0x60) || ($j >= 0x7B && $j <= 0x80) || ($j >= 0x00 && $j <= 0x40) || (($i >= 0xA1 && $i <= 0xAF) && ($j >= 0xA1 && $j <= 0xFE)) || ($i == 0xC6 && ($j >= 0x53 && $j <= 0xA0)) || ($i >= 0xC7 && ($j >= 0x41 && $j <= 0xA0))) return false;
			else return true;
		}

		# URL 주소가 올바른지 검사
		public static function is_url( $str ) {
			if(eregi("^http://([a-z0-9_-./~@?=&-#{5,}]+)", $str)) return $str;
			else return '';
		}
	}

?>